package sword_offer;

/**
 * @author Synhard
 * @version 1.0
 * @Class sword_offer.Code16
 * @Description 实现int sqrt(int x)函数。
 *
 * 计算并返回x的平方根，其中x 是非负整数。
 *
 * 由于返回类型是整数，结果只保留整数的部分，小数部分将被舍去。
 * @tel 13001321080
 * @email 823436512@qq.com
 * @date 2021-03-14 17:30
 */
public class Code16 {

    public static void main(String[] args) {
        System.out.println(mySqrt(2147483647));
        System.out.println(mySqrt(5));
    }

    public static int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }
        if (x == 1 || x == 2 || x == 3) {
            return 1;
        }

        long low = 1;
        long high = x / 2;
        long mid;
        while (low <= high) {
            mid = (low + high) / 2;
            if (mid * mid < x) {
                low = mid + 1;
            }
            if (mid * mid == x) {
                return (int) mid;
            }
            if (mid * mid > x) {
                high = mid - 1;
            }
        }
        return (int) (low - 1);
//        for (long i = 1; i <= x / 2; i++) {
//
//
//
//            if (i * i > tempt) return (int) (i - 1);
//            if (i * i == x) return (int) i;
//        }
//        return x / 2;
    }
}
